/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.bean.SalidaProyecto;
import sv.com.intesal.proyecto.controlador.SalidaProyectoControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author root
 */
@ManagedBean(name = "consultaSalidaProyectoManaged")
@ViewScoped
public class ConsultaSalidaProyectoManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;
    private Boolean flagStep_1;
    private Boolean flagStep_2;

    /*ENCA SALIDA PROYECTO*/
    private SalidaProyecto selectedEncaSalidaProyecto;
    private List<SalidaProyecto> encaSalidaProyectos;

    /*DETA SALIDA PROYECTO*/
    private SalidaProyecto selectedDetaSalidaProyecto;
    private List<SalidaProyecto> detaSalidaProyectos;

    /*PROYECTO*/
    private Proyecto selectedProyecto;

    public ConsultaSalidaProyectoManaged() {
        m = new Mensaje();
        sm = new SessionManaged();

        this.flagStep_1 = true;
        this.flagStep_2 = false;
        this.selectedEncaSalidaProyecto = new SalidaProyecto();
        this.selectedDetaSalidaProyecto = new SalidaProyecto();
        this.selectedProyecto = new Proyecto();
    }

    public void buscarGrid() {
        try {
            if (sm.validar_rol_usuario("wfrmcon_SalidaProyecto", sm.buscar) == true) {
                //this.selectedEncaSalidaProyecto.setId_cl(this.selectedProyecto.getId_c());/*  Aqui se le puede agregar una busqueda por cliente en un futuro. */

                this.selectedEncaSalidaProyecto.setId_p(this.selectedProyecto.getId_p());
                SalidaProyectoControlador sp = new SalidaProyectoControlador();
                this.encaSalidaProyectos = sp.getConsulta_SalidaProyecto(this.selectedEncaSalidaProyecto);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void anularSalidaProyecto() {

        try {
            if (this.validar_anular() == true) {
                if (this.detaSalidaProyectos == null) {
                    m.messageFatal("NO HAY MATERIALES PARA ANULAR");
                } else if (sm.validar_rol_usuario("wfrmcon_SalidaProyecto", sm.anular) == true) {
                    SalidaProyectoControlador sp = new SalidaProyectoControlador();
                    sp.anularSalidaProyecto(this.detaSalidaProyectos);
                    LimpiarManaged.limpiar();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void modificarSalidaProyecto() {

        try {
            if (this.validar_mofiicar() == true) {
                if (sm.validar_rol_usuario("wfrmcon_SalidaProyecto", sm.modificar) == true) {
                    SalidaProyectoControlador sp = new SalidaProyectoControlador();
                    sp.modificarSalidaProyecto(this.selectedDetaSalidaProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validar_anular() throws Exception {

        try {
            Boolean var_return = true;
            if (this.selectedDetaSalidaProyecto.getEstado_sp().equals("P")) {
                m.messageError("PENDIENTE MODFICIAR");
                var_return = false;
            } else if (this.selectedDetaSalidaProyecto.getEstado_sp().equals("A")) {
                m.messageError("NO PUEDE ANULAR EL REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaSalidaProyecto.getId_sp() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A ANULAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (this.detaSalidaProyectos.size() == 0) {
                m.messageFatal("NO HAY MATERIALES PARA ANULAR EL REGISTRO");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private Boolean validar_mofiicar() throws Exception {

        try {
            Boolean var_return = true;
            if (this.selectedDetaSalidaProyecto.getEstado_sp().equals("P")) {
                m.messageError("PENDIENTE MODFICIAR");
                var_return = false;
            } else if (this.selectedDetaSalidaProyecto.getEstado_sp().equals("A")) {
                m.messageError("NO PUEDE MODIFICAR EL REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaSalidaProyecto.getId_sp() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void ocultarFlag_1() {

        try {
            if (this.selectedDetaSalidaProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaSalidaProyecto != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                SalidaProyectoControlador sp = new SalidaProyectoControlador();
                this.detaSalidaProyectos = sp.getDetaSalidaProyecto(this.selectedDetaSalidaProyecto.getId_sp());

            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getProyecto_Quick(Proyecto p) {
        try {
            this.selectedProyecto = p;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarReporte_Enca() {
        try {
            if (this.encaSalidaProyectos == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_SalidaProyecto", sm.reporte) == true) {
                    this.selectedEncaSalidaProyecto.setId_p(this.selectedProyecto.getId_p());
                    SalidaProyectoControlador sp = new SalidaProyectoControlador();
                    sp.generarReporte_Enca(this.selectedEncaSalidaProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarReporte_Deta() {
        try {
            if (this.detaSalidaProyectos.size() <= 0) {
                m.messageError("NO HAY MATERIALES PARA GENERAR REPORTE DEL DETALLE");
            } else if (this.selectedDetaSalidaProyecto != null) {
                if (sm.validar_rol_usuario("wfrmcon_SalidaProyecto", sm.reporte) == true) {
                    SalidaProyectoControlador sp = new SalidaProyectoControlador();
                    sp.generarReporte_Detalle(this.selectedDetaSalidaProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*
    SETTERS & GETTERS
     */
    public List<SalidaProyecto> getEncaSalidaProyectos() {
        return encaSalidaProyectos;
    }

    public void setEncaSalidaProyectos(List<SalidaProyecto> encaSalidaProyectos) {
        this.encaSalidaProyectos = encaSalidaProyectos;
    }

    public Proyecto getSelectedProyecto() {
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public List<SalidaProyecto> getDetaSalidaProyectos() {
        return detaSalidaProyectos;
    }

    public void setDetaSalidaProyectos(List<SalidaProyecto> detaSalidaProyectos) {
        this.detaSalidaProyectos = detaSalidaProyectos;
    }

    public SalidaProyecto getSelectedDetaSalidaProyecto() {
        return selectedDetaSalidaProyecto;
    }

    public void setSelectedDetaSalidaProyecto(SalidaProyecto selectedDetaSalidaProyecto) {
        this.selectedDetaSalidaProyecto = selectedDetaSalidaProyecto;
    }

    public SalidaProyecto getSelectedEncaSalidaProyecto() {
        return selectedEncaSalidaProyecto;
    }

    public void setSelectedEncaSalidaProyecto(SalidaProyecto selectedEncaSalidaProyecto) {
        this.selectedEncaSalidaProyecto = selectedEncaSalidaProyecto;
    }
}
